Provisioning platforms are known which allow a systems administrator to select, configure, and push a set of software to new machines on a network. It is a shortcoming in existing provisioning platforms that the systems administrator may have to make manual selections and perform other tasks manually in order to carry out that installation process. In the case of software provisioning to sets of virtualized machines, the installation difficulties can be compounded, since different sets of virtual machines may be configured to use different set of available resources, and/or can be instantiated using management tools from different vendors that may or may not be fully compatible. For instance, one set of virtual machines can be configured with a relatively small amount of hard disk or other store, while another may be configured with extensive storage resources. The provisioning of, for example, a database application to those two classes of virtual machine may therefore be best optimized to use one set of database or storage settings versus another. Existing provisioning platforms make no provision, however, to differentially provision different sets of virtual machines based on available resources. As a result, using known provisioning platforms a systems administrator may have to individually perform a provisioning process for different sets of virtual machines one after the other, even if the target virtual machines are intended to receive essentially the same or a highly similar software installation. It may be desirable to provide methods and systems for the software provisioning on virtual machines having different configurations, in which the distribution platform can automatically identify and make adjustments to different distributions intended for different target virtual machines, based on different configuration classes of the virtual machines.